package karaoke.controller;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import karaoke.excepcion.DAOExcepcion;
import karaoke.json.ClienteProductoRespuesta;
import karaoke.json.CustomGenericResponse;
import karaoke.modelo.Producto;
import karaoke.modelo.Tipo;
import karaoke.negocio.GestionProducto;
import karaoke.negocio.GestionTipo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("productos")
public class ProductoController {
	
	@RequestMapping(method = RequestMethod.GET)
    public String obtenerPaginoProducto() {
    	return "/mantenimiento/productos";
	}
	
	
	@RequestMapping(value="/lista", method = RequestMethod.GET)
    public @ResponseBody ClienteProductoRespuesta listaProductos(){
		 ClienteProductoRespuesta res= new ClienteProductoRespuesta();
		 GestionProducto gestion = new GestionProducto();
		 
		 try {
			List<Producto> listaProducto = gestion.buscarPorNombre("");
			res.setRows(listaProducto);
			res.setRecords( String.valueOf(listaProducto.size()) );
			res.setPage( "1" );
        	
        	// Same. Assign a dummy total pages
			res.setTotal( "10" );
        	
		} catch (DAOExcepcion e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 
		return res; 
	 }
	
	
	@RequestMapping(value = "/add", method = RequestMethod.POST)
    public @ResponseBody CustomGenericResponse add(Producto producto) {
    	
		GestionProducto gestion = new GestionProducto();
		 try {
		producto = gestion.insertar(producto.getNombre(), producto.getPrecio(), producto.getDisponibilidad(), producto.getTipo().getIdtipo());
    	
    	// Check if successful
    	if ( producto.getIdproducto()>0 ) {
    		// Success. Return a custom response
    		CustomGenericResponse response = new CustomGenericResponse();
			response.setSuccess(true);
			response.setMessage("Action successful!");
    		return response;
    		
    	} else {
    		// A failure. Return a custom response as well
    		CustomGenericResponse response = new CustomGenericResponse();
			response.setSuccess(false);
			response.setMessage("Action failure!");
    		return response;
    	}
		 } catch (DAOExcepcion e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				CustomGenericResponse response = new CustomGenericResponse();
				response.setSuccess(false);
				response.setMessage("Action failure!");
	    		return response;
	    		// :(
				
			}
	}
	
	@RequestMapping(value = "/edit", method = RequestMethod.POST)
    public @ResponseBody CustomGenericResponse edit(
    		@RequestParam("id") String id,
    		Producto producto) {
    	
		GestionProducto gestion = new GestionProducto();
		 try {
		producto.setIdproducto(Integer.valueOf(id));
		producto=gestion.actualizar(producto.getIdproducto(), producto.getNombre(), producto.getPrecio(),producto.getDisponibilidad(), producto.getTipo().getIdtipo());
    	
    	
    	// Check if successful
    	if ( producto.getIdproducto()!=0 ) {
    		// Success. Return a custom response
    		CustomGenericResponse response = new CustomGenericResponse();
			response.setSuccess(true);
			response.setMessage("Action successful!");
    		return response;
    		
    	} else {
    		// A failure. Return a custom response as well
    		CustomGenericResponse response = new CustomGenericResponse();
			response.setSuccess(false);
			response.setMessage("Action failure!");
    		return response;
    	}
		 } catch (DAOExcepcion e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
	}
	
	@RequestMapping(value = "/delete", method = RequestMethod.POST)
    public @ResponseBody CustomGenericResponse delete(
    		@RequestParam("id") String id
    ) {
    	
    	
    	GestionProducto gestion= new GestionProducto();
    	try{
    		gestion.eliminar(Integer.valueOf(id));
    		CustomGenericResponse response = new CustomGenericResponse();
			response.setSuccess(true);
			response.setMessage("Action successful!");
    		return response;
    		
	 } catch (DAOExcepcion e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
    		CustomGenericResponse response = new CustomGenericResponse();
			response.setSuccess(false);
			response.setMessage("Action failure!");
    		return response;
		}
    		
    	
	}
	
	@RequestMapping(value="/listaTipo", method = RequestMethod.GET)
    public @ResponseBody Collection<Tipo> listaTipo(){
		
		Collection<Tipo> res= new  ArrayList<Tipo>();
		
		GestionTipo tipo2 = new GestionTipo();
		 try {
			res = tipo2.listar();
		} catch (DAOExcepcion e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return res;
		
		} 


	


	
}
